(Fset_char_table_range): Handle charsets ascii,
authorKenichi Handa <handa@m17n.org>
Wed, 4 Feb 2004 01:18:45 +0000 (01:18 +0000)
committerKenichi Handa <handa@m17n.org>
Wed, 4 Feb 2004 01:18:45 +0000 (01:18 +0000)
eight-bit-control, and eight-bit-graphic correctly.

src/fns.c

index 493d7ba289706f0226f88585791234f3d0ebb95d..c9e25ecf547462fcc5eb9ba954b4b84822176ebe 100644 (file)
--- a/src/fns.c
+++ b/src/fns.c
@@ -2512,14 +2512,26 @@ character set, or a character code.  Return VALUE.  */)
   else if (SYMBOLP (range))
     {
       Lisp_Object charset_info;
+      int charset_id;
 
       charset_info = Fget (range, Qcharset);
-      CHECK_VECTOR (charset_info);
-
-      return Faset (char_table,
-                   make_number (XINT (XVECTOR (charset_info)->contents[0])
-                                + 128),
-                   value);
+      if (! VECTORP (charset_info)
+         || ! NATNUMP (AREF (charset_info, 0))
+         || (charset_id = XINT (AREF (charset_info, 0)),
+             ! CHARSET_DEFINED_P (charset_id)))
+       error ("Invalid charset: %s", SYMBOL_NAME (range));
+
+      if (charset_id == CHARSET_ASCII)
+       for (i = 0; i < 128; i++)
+         XCHAR_TABLE (char_table)->contents[i] = value;
+      else if (charset_id == CHARSET_8_BIT_CONTROL)
+       for (i = 128; i < 160; i++)
+         XCHAR_TABLE (char_table)->contents[i] = value;
+      else if (charset_id == CHARSET_8_BIT_GRAPHIC)
+       for (i = 160; i < 256; i++)
+         XCHAR_TABLE (char_table)->contents[i] = value;
+      else
+       XCHAR_TABLE (char_table)->contents[charset_id + 128] = value;
     }
   else if (INTEGERP (range))
     Faset (char_table, range, value);